package com.shenfa.dao;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.shenfa.bean.BillStencil;
import com.shenfa.bean.BillStencilArea;
import com.shenfa.bean.BillStencilSub;
import com.shenfa.tools.SteelTools;

/**
 * 账单管理-模板管理 DAO
 * 
 * @author 张瑶
 * @date 2011-08-23
 */
public class BillStencilDao {

	@Autowired
	private SqlMapClient sqlMapClient;

	/**
	 * 模糊查询模板主表信息
	 * 
	 * @param billstencil
	 *            账单管理-模板管理，与T_S_STENCIL[模版主表]对应
	 * @param skip
	 *            分页使用
	 * @param max
	 *            分页使用
	 * @return 模板主表信息
	 */
	@SuppressWarnings("unchecked")
	public List<BillStencil> selectBillStencil(BillStencil billStencil, int skip, int max) {

		List<BillStencil> list = null;
		try {
			list = sqlMapClient.queryForList("bill_manager.selectBillStencil", billStencil, skip, max);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return list;
	}

	/**
	 * 增加模板主表信息
	 * 
	 * @param billStencil
	 *            账单管理-模板管理，与T_S_STENCIL[模版主表]对应
	 * @return 增加是否成功，返回NULL则失败。
	 */
	public Object insertBillStencil(BillStencil billStencil) {

		try {
			return sqlMapClient.insert("bill_manager.insertBillStencil", billStencil);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return null;
	}

	/**
	 * 更新模板主表信息
	 * 
	 * @param billStencil
	 *            账单管理-模板管理，与T_S_STENCIL[模版主表]对应
	 * @return 0 则表示更新失败。
	 */
	public int updateBillStencil(BillStencil billStencil) {
		int rows = 0;
		try {
			rows = sqlMapClient.update("bill_manager.updateBillStencil", billStencil);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}

	/**
	 * 刪除模板主表信息
	 * 
	 * @param billStencil
	 *            账单管理-模板管理，与T_S_STENCIL[模版主表]对应
	 * @return 0 则表示刪除失败。
	 */
	public int deleteBillStencil(BillStencil billStencil) {
		int rows = 0;
		try {
			rows = sqlMapClient.delete("bill_manager.deleteBillStencil", billStencil);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}

	/**
	 * 模糊查询模板从表信息
	 * 
	 * @param billStencilSub
	 *            账单管理-模板管理，与T_S_STENCIL_SUB[模版从表]对应
	 * @param skip
	 *            分页使用
	 * @param max
	 *            分页使用
	 * @return 模板信息
	 */
	@SuppressWarnings("unchecked")
	public List<BillStencilSub> selsctBillStencilSub(BillStencilSub billStencilSub, int skip, int max) {

		List<BillStencilSub> list = null;
		try {
			list = sqlMapClient.queryForList("bill_manager.selectBillStencilSub", billStencilSub, skip, max);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return list;
	}
	
	/**
	 * 根据模板编号，版本号查询最小数据模块名称
	 */
	@SuppressWarnings("finally")
	public String getMinStencilSubName(BillStencilSub billStencilSub) {
		String name = null;
		try {
			name = (String) sqlMapClient.queryForObject("bill_manager.getAllStencilSubName", billStencilSub);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		} finally {
			return name;
		}
	}

	/**
	 * 增加模板从表信息
	 * 
	 * @param billStencilSub
	 *            账单管理-模板管理，与T_S_STENCIL_SUB[模版从表]对应
	 * @return 增加是否成功，返回NULL则失败。
	 */
	public Object insertBillStencilSub(BillStencilSub billStencilSub) {

		try {
			return sqlMapClient.insert("bill_manager.insertBillStencilSub", billStencilSub);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return null;
	}

	/**
	 * 更新模板从表信息
	 * 
	 * @param billStencilSub
	 *            账单管理-模板管理，与T_S_STENCIL_SUB[模版从表]对应
	 * @return 0 则表示更新失败。
	 */
	public int updateBillStencilSub(BillStencilSub billStencilSub) {
		int rows = 0;
		try {
			rows = sqlMapClient.update("bill_manager.updateBillStencilSub", billStencilSub);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}

	/**
	 * 刪除模板从表信息
	 * 
	 * @param billStencilSub
	 *            账单管理-模板管理，与T_S_STENCIL_SUB[模版从表]对应
	 * @return 0 则表示刪除失败。
	 */
	public int deleteBillStencilSub(BillStencilSub billStencilSub) {
		int rows = 0;
		try {
			rows = sqlMapClient.delete("bill_manager.deleteBillStencilSub", billStencilSub);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}

	/**
	 * 模糊查询模板个性化区域表信息
	 * 
	 * @param billStencilArea
	 *            账单管理-模板管理，与T_S_AREA[模板个性化区域表]对应
	 * @param skip
	 *            分页使用
	 * @param max
	 *            分页使用
	 * @return 模板信息
	 */
	@SuppressWarnings("unchecked")
	public List<BillStencilArea> selsctBillStencilArea(BillStencilArea billStencilArea, int skip, int max) {

		List<BillStencilArea> list = null;
		try {
			list = sqlMapClient
					.queryForList("bill_manager.selectBillStencilArea", billStencilArea, skip, max);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return list;
	}

	/**
	 * 增加模板个性化区域表信息
	 * 
	 * @param billStencilArea
	 *            账单管理-模板管理，与T_S_AREA[模板个性化区域表]对应
	 * @return 增加是否成功，返回NULL则失败。
	 */
	public Object insertBillStencilArea(BillStencilArea billStencilArea) {

		try {
			return sqlMapClient.insert("bill_manager.insertBillStencilArea", billStencilArea);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return null;
	}

	/**
	 * 更新模板个性化区域表信息
	 * 
	 * @param billStencilArea
	 *            账单管理-模板管理，与T_S_AREA[模板个性化区域表]对应
	 * @return 0 则表示更新失败。
	 */
	public int updateBillStencilArea(BillStencilArea billStencilArea) {
		int rows = 0;
		try {
			rows = sqlMapClient.update("bill_manager.updateBillStencilArea", billStencilArea);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}

	/**
	 * 刪除模板个性化区域表信息
	 * 
	 * @param billStencilArea
	 *            账单管理-模板管理，与T_S_AREA[模板个性化区域表]对应
	 * @return 0 则表示刪除失败。
	 */
	public int deleteBillStencilArea(BillStencilArea billStencilArea) {
		int rows = 0;
		try {
			rows = sqlMapClient.delete("bill_manager.deleteBillStencilArea", billStencilArea);
		} catch (SQLException e) {
			SteelTools.log(e.getMessage());
		}
		return rows;
	}
}
